From: Philip Withnall Date: Fri, 28 Jun 2024 16:06:31 +0000 (+0100) Subject: shell-util: Fix a memory leak of a floating variant on error X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~226^2^2~51 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=976c99c5e3edf45c938bdd338c1daec45477316c;p=gnome-shell.git shell-util: Fix a memory leak of a floating variant on error If `params` is floating when provided by the caller, and if one of the early return paths is taken from this function, the call into GIO never sinks and takes ownership of the `GVariant`, and hence it’s leaked. Always explicitly sink the input variant as soon as the function is called, then it can’t be leaked. Signed-off-by: Philip Withnall Part-of: --- diff --git a/src/shell-util.c b/src/shell-util.c index 742aa829a..a965c7148 100644 --- a/src/shell-util.c +++ b/src/shell-util.c @@ -619,6 +619,7 @@ shell_util_systemd_call (const char *command, gpointer user_data) { g_autoptr (GTask) task = g_task_new (NULL, cancellable, callback, user_data); + g_autoptr (GVariant) params_owned = g_variant_ref_sink (g_steal_pointer (¶ms)); #ifdef HAVE_SYSTEMD g_autoptr (GDBusConnection) connection = NULL; @@ -695,7 +696,7 @@ shell_util_systemd_call (const char *command, "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", command, - params, + params_owned, G_VARIANT_TYPE ("(o)"), G_DBUS_CALL_FLAGS_NONE, -1, cancellable,